package controladores;

import conexion.Conexion;
import controladores.ControladorGenerico;
import entidades.ConfigFTP;
import entidades.Contacto;
import entidades.Cuota;
import entidades.DatosInstitucionales;
import entidades.DatosPersonales;
import entidades.Domicilio;
import entidades.Enumeraciones;
import entidades.Identificacion;
import entidades.Participacion;
import entidades.miembros.Socio;
import entidades.Tutor;
import entidades.Usuario;

import java.util.ArrayList;
import java.util.Calendar;

import javax.persistence.EntityManager;

import utils.Encriptador;

/**
 *
 * @author fcarou
 */
public class GeneradorDatos
{
    private ControladorGenerico con;
    
    public GeneradorDatos ()
    {
        con = new ControladorGenerico();
    }
    
    public void generarDatos ()
    {        
        try
        {
            for (int i = 1; i < 6; i++)
            {
                Identificacion identificacionSocio = this.generarIdentificacion(i * 1000000, "Nombre " + i, "Apellido " + i);
                Contacto contactoSocio = this.generarContacto((i * 445) + "4456", "15" + (i*265) , "email" + i + "@hotmail.com", "facebook.com/" + i);
                Domicilio domicilioSocio = this.generarDomicilio("Calle " + i, i * 120);
                
                Calendar nacimientoSocio = Calendar.getInstance();
                nacimientoSocio.set(Calendar.YEAR, 1991);
                
                nacimientoSocio.set(Calendar.MONTH, (int) (Math.random() * 12));
                nacimientoSocio.set(Calendar.DAY_OF_MONTH, (int) (Math.random() * 28) + 1);
                
                DatosPersonales datosPersonalesSocio = this.generarDatosPersonales(identificacionSocio, contactoSocio, nacimientoSocio, Enumeraciones.EstadoCivil.SOLTERO, "Lugar " + i);
                datosPersonalesSocio.setContacto(contactoSocio);
                DatosInstitucionales datosInstitucionalesSocio = this.generarDatosInstitucionales(Calendar.getInstance(), Enumeraciones.Categoria.ACTIVO, Enumeraciones.Tipo.ESTUDIANTE, null, i + "/" + (i*15));
                
                //Tutor tutor = ConstructoresNulos.getTutor();
                
                Socio socio = new Socio();
                socio.setParticipaciones(new ArrayList<Participacion>());
                socio.setCuotas(new ArrayList<Cuota>());
                socio.setDatosInstitucionales(datosInstitucionalesSocio);
                socio.setDatosPersonales(datosPersonalesSocio);
                socio.setDomicilio(domicilioSocio);
                //socio.setTutor(tutor);
                
                con.create(socio);
            }
            
            String encriptada = Encriptador.encriptar("desierto");
            Contacto contacto = this.generarContacto("4455693", "154564544", "pipecarou@hotmail.com", "facebook.com/felipecarou.3");
            Usuario usuario = this.generarUsuario("pipecarou", encriptada, true, contacto, "Felipe", "Carou");
            con.create(usuario);
            
            ConfigFTP config = new ConfigFTP ("ftp.felipecarou.com", "felipec1", "Desierto123?", 21, "club");
            con.create(config);
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }
    }
    
    private Socio generarSocio ()
    {
        
        return null;
    }
    
    private DatosPersonales generarDatosPersonales (Identificacion id, Contacto contacto, Calendar nacimiento, Enumeraciones.EstadoCivil estado, String lugarNacimiento)
    {
        DatosPersonales datos = new DatosPersonales();
        
        datos.setIdentificacion(id);
        datos.setEstadoCivil(estado);
        datos.setFechaNacimiento(nacimiento);
        datos.setLugarNacimiento(lugarNacimiento);
        
        return datos;
    }
    
    private DatosInstitucionales generarDatosInstitucionales (Calendar alta, Enumeraciones.Categoria categoria, Enumeraciones.Tipo tipo, Socio presentante, String resAlta)
    {
        DatosInstitucionales datos = new DatosInstitucionales();
        
        datos.setAlta(alta);
        datos.setCategoria(categoria);
        datos.setPresentante(presentante);
        datos.setResAlta(resAlta);
        datos.setTipo(tipo);
        
        return datos;
    }
    
    private Contacto generarContacto (String fijo, String cel, String email, String redSocial)
    {
        Contacto con = new Contacto();
        
        con.setFijo(fijo);
        con.setCelular(cel);
        con.setEmail(email);
        con.setRedSocial(redSocial);
        
        return con;
    }
    
    private Identificacion generarIdentificacion (long dni, String nombre, String apellido)
    {
        Identificacion id = new Identificacion();
        
        id.setDni(dni);
        id.setNombre(nombre);
        id.setApellido(apellido);
        
        return id;
    }
    
    private Usuario generarUsuario (String user, String clave, boolean habilitado, Contacto contacto, String nombre, String apellido)
    {
        Usuario usuario = new Usuario();
        
        usuario.setApellido(apellido);
        usuario.setNombre(nombre);
        usuario.setUsuario(user);
        usuario.setClave(clave);
        usuario.setHabilitado(habilitado);
        
        return usuario;
    }
    
    private Tutor generarTutor (int dni, String nombre, String apellido, Enumeraciones.EstadoCivil estado, String vinculo, Domicilio domicilio, Contacto contacto)
    {
        Tutor tutor = new Tutor();
        Identificacion identificacion = new Identificacion(nombre, apellido, dni);
        
        tutor.setEstadoCivil(estado);
        tutor.setVinculo(vinculo);
        tutor.setDomicilio(domicilio);
        tutor.setContacto(contacto);
        
        tutor.setIdentificacion(identificacion);
        
        return tutor;
    }
    
    private Domicilio generarDomicilio (String calle, int altura)
    {
        Domicilio domicilio = new Domicilio ();
        
        domicilio.setCalle(calle);
        domicilio.setAltura(altura);
        
        return domicilio;
    }
}
